/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * DatosEstudioLaboratorioPanel.java
 *
 * Created on 27/01/2011, 13:04:34
 */

package presentacion.examen;

import hibernate.objeto.AnalisisCargaEstudioLaboratorio;
import hibernate.objeto.DeterminacionesEstudioLaboratorio;
import hibernate.objeto.EstudioLaboratorio;
import hibernate.objeto.TipoCargaEstudioLaboratorio;
import java.awt.Component;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JDialog;
import javax.swing.JPanel;
import logica.AnalisisCargaEstudioLaboratorioLogica;
import logica.CapaLogica;
import logica.DeterminacionesEstudioLaboratorioLogica;
import logica.EstudioLaboratorioLogica;
import logica.TipoCargaEstudioLaboratorioLogica;
import logica.validacion.CapaValidacion;
import presentacion.CapaPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;

/**
 *
 * @author Gonzalo
 */
public class DatosEstudioLaboratorioPanel extends javax.swing.JPanel {

    /** Creates new form DatosEstudioLaboratorioPanel */
    public DatosEstudioLaboratorioPanel(
            EstudioLaboratorio estudioLaboratorio) {
        this.estudioLaboratorio = estudioLaboratorio;

        listaAnalisisCargaEstudioLaboratorio =
                AnalisisCargaEstudioLaboratorioLogica.getAll();
        
        initComponents();
        personalizarGUI();
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        textoDescriptivoVisualizacionEstudioLaboratorio = new javax.swing.JLabel();
        panelEstudioLaboratorio = new javax.swing.JPanel();
        textoBioquimicoLaboratorio = new javax.swing.JLabel();
        textoProtocoloLaboratorio = new javax.swing.JLabel();
        bioquimicoLaboratorio = new javax.swing.JTextField();
        protocoloLaboratorio = new javax.swing.JTextField();
        textoComentariosLaboratorio = new javax.swing.JLabel();
        ComentariosLaboratorioScrollPane = new javax.swing.JScrollPane();
        comentariosLaboratorio = new javax.swing.JTextArea();
        panelDeterminacionesAnalisisYTipo = new javax.swing.JPanel();
        agregarDeterminacionesBoton = new javax.swing.JButton();
        textoAnalisisDeterminaciones = new javax.swing.JLabel();
        analisisDeterminaciones = new javax.swing.JComboBox();
        tipoDeterminaciones = new javax.swing.JComboBox();
        textoTipoDeterminaciones = new javax.swing.JLabel();
        separadorDeterminacionLaboratorio1 = new javax.swing.JSeparator();
        panelEstudioLaboratorioScrollPane = new javax.swing.JScrollPane();
        panelEstudioLaboratorioInterno = new javax.swing.JPanel();
        textoDeterminaciones = new javax.swing.JLabel();

        textoDescriptivoVisualizacionEstudioLaboratorio.setFont(Fuente.FUENTE_LABEL);
        textoDescriptivoVisualizacionEstudioLaboratorio.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVisualizacionEstudioLaboratorio.setText("Ingrese los datos del estudio cardiológico");
        textoDescriptivoVisualizacionEstudioLaboratorio.setPreferredSize(new java.awt.Dimension(374, 20));

        panelEstudioLaboratorio.setPreferredSize(new java.awt.Dimension(414, 457));
        panelEstudioLaboratorio.setRequestFocusEnabled(false);
        panelEstudioLaboratorio.setVerifyInputWhenFocusTarget(false);

        textoBioquimicoLaboratorio.setFont(Fuente.FUENTE_LABEL);
        textoBioquimicoLaboratorio.setForeground(Fuente.COLOR_NORMAL);
        textoBioquimicoLaboratorio.setText("Bioquímico");
        textoBioquimicoLaboratorio.setPreferredSize(new java.awt.Dimension(60, 20));

        textoProtocoloLaboratorio.setFont(Fuente.FUENTE_LABEL);
        textoProtocoloLaboratorio.setForeground(Fuente.COLOR_NORMAL);
        textoProtocoloLaboratorio.setText("Protocolo #");
        textoProtocoloLaboratorio.setPreferredSize(new java.awt.Dimension(60, 20));

        bioquimicoLaboratorio.setFont(Fuente.FUENTE_TEXTFIELD);
        bioquimicoLaboratorio.setPreferredSize(new java.awt.Dimension(345, 20));

        protocoloLaboratorio.setFont(Fuente.FUENTE_TEXTFIELD);
        protocoloLaboratorio.setPreferredSize(new java.awt.Dimension(345, 20));

        textoComentariosLaboratorio.setFont(Fuente.FUENTE_LABEL);
        textoComentariosLaboratorio.setForeground(Fuente.COLOR_NORMAL);
        textoComentariosLaboratorio.setText("Comentarios");
        textoComentariosLaboratorio.setPreferredSize(new java.awt.Dimension(60, 20));

        ComentariosLaboratorioScrollPane.setPreferredSize(new java.awt.Dimension(345, 50));

        comentariosLaboratorio.setColumns(19);
        comentariosLaboratorio.setFont(Fuente.FUENTE_TEXTFIELD);
        comentariosLaboratorio.setRows(2);
        ComentariosLaboratorioScrollPane.setViewportView(comentariosLaboratorio);

        agregarDeterminacionesBoton.setFont(Fuente.FUENTE_BOTON_INTERNO);
        agregarDeterminacionesBoton.setIcon(Icono.ICONO_16_AGREGAR);
        agregarDeterminacionesBoton.setMnemonic('a');
        agregarDeterminacionesBoton.setText("Agregar análisis");
        agregarDeterminacionesBoton.setToolTipText("Agrega un análisis según el nombre del anális y el tipo");
        agregarDeterminacionesBoton.setPreferredSize(new java.awt.Dimension(160, 23));
        agregarDeterminacionesBoton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                agregarDeterminacionesBotonActionPerformed(evt);
            }
        });

        textoAnalisisDeterminaciones.setFont(Fuente.FUENTE_LABEL);
        textoAnalisisDeterminaciones.setForeground(Fuente.COLOR_NORMAL);
        textoAnalisisDeterminaciones.setText("Análisis");
        textoAnalisisDeterminaciones.setPreferredSize(new java.awt.Dimension(70, 20));

        analisisDeterminaciones.setFont(Fuente.FUENTE_COMBOBOX);
        analisisDeterminaciones.setModel(CapaPresentacion.getListaDeAnalisisCargaEstudioLaboratorio(listaAnalisisCargaEstudioLaboratorio));
        analisisDeterminaciones.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                analisisDeterminacionesFocusLost(evt);
            }
        });

        tipoDeterminaciones.setFont(Fuente.FUENTE_COMBOBOX);

        textoTipoDeterminaciones.setFont(Fuente.FUENTE_LABEL);
        textoTipoDeterminaciones.setForeground(Fuente.COLOR_NORMAL);
        textoTipoDeterminaciones.setText("Tipo");
        textoTipoDeterminaciones.setPreferredSize(new java.awt.Dimension(70, 20));

        separadorDeterminacionLaboratorio1.setPreferredSize(new java.awt.Dimension(354, 2));

        javax.swing.GroupLayout panelDeterminacionesAnalisisYTipoLayout = new javax.swing.GroupLayout(panelDeterminacionesAnalisisYTipo);
        panelDeterminacionesAnalisisYTipo.setLayout(panelDeterminacionesAnalisisYTipoLayout);
        panelDeterminacionesAnalisisYTipoLayout.setHorizontalGroup(
            panelDeterminacionesAnalisisYTipoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDeterminacionesAnalisisYTipoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelDeterminacionesAnalisisYTipoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelDeterminacionesAnalisisYTipoLayout.createSequentialGroup()
                        .addComponent(textoTipoDeterminaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(tipoDeterminaciones, 0, 310, Short.MAX_VALUE))
                    .addGroup(panelDeterminacionesAnalisisYTipoLayout.createSequentialGroup()
                        .addComponent(textoAnalisisDeterminaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(analisisDeterminaciones, 0, 310, Short.MAX_VALUE))
                    .addComponent(agregarDeterminacionesBoton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(separadorDeterminacionLaboratorio1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 384, Short.MAX_VALUE)))
        );
        panelDeterminacionesAnalisisYTipoLayout.setVerticalGroup(
            panelDeterminacionesAnalisisYTipoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDeterminacionesAnalisisYTipoLayout.createSequentialGroup()
                .addGroup(panelDeterminacionesAnalisisYTipoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoAnalisisDeterminaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(analisisDeterminaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelDeterminacionesAnalisisYTipoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoTipoDeterminaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tipoDeterminaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(agregarDeterminacionesBoton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
                .addComponent(separadorDeterminacionLaboratorio1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        panelEstudioLaboratorioScrollPane.setBorder(null);
        panelEstudioLaboratorioScrollPane.setPreferredSize(new java.awt.Dimension(374, 177));

        panelEstudioLaboratorioInterno.setLayout(new javax.swing.BoxLayout(panelEstudioLaboratorioInterno, javax.swing.BoxLayout.Y_AXIS));
        panelEstudioLaboratorioScrollPane.setViewportView(panelEstudioLaboratorioInterno);

        textoDeterminaciones.setFont(Fuente.FUENTE_LABEL);
        textoDeterminaciones.setForeground(Fuente.COLOR_NORMAL);
        textoDeterminaciones.setText("Determinaciones");
        textoDeterminaciones.setPreferredSize(new java.awt.Dimension(70, 20));

        javax.swing.GroupLayout panelEstudioLaboratorioLayout = new javax.swing.GroupLayout(panelEstudioLaboratorio);
        panelEstudioLaboratorio.setLayout(panelEstudioLaboratorioLayout);
        panelEstudioLaboratorioLayout.setHorizontalGroup(
            panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEstudioLaboratorioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(panelEstudioLaboratorioScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, panelEstudioLaboratorioLayout.createSequentialGroup()
                        .addGroup(panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(textoBioquimicoLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(panelEstudioLaboratorioLayout.createSequentialGroup()
                                .addComponent(textoProtocoloLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(protocoloLaboratorio, javax.swing.GroupLayout.Alignment.LEADING, 0, 0, Short.MAX_VALUE)
                                    .addComponent(bioquimicoLaboratorio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE))))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(textoComentariosLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(ComentariosLaboratorioScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE))
                    .addComponent(panelDeterminacionesAnalisisYTipo, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(textoDeterminaciones, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 394, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        panelEstudioLaboratorioLayout.setVerticalGroup(
            panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelEstudioLaboratorioLayout.createSequentialGroup()
                .addGroup(panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(panelEstudioLaboratorioLayout.createSequentialGroup()
                        .addGroup(panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(textoBioquimicoLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(bioquimicoLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(textoProtocoloLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(protocoloLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(panelEstudioLaboratorioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(ComentariosLaboratorioScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelEstudioLaboratorioLayout.createSequentialGroup()
                            .addComponent(textoComentariosLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(30, 30, 30))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(textoDeterminaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelDeterminacionesAnalisisYTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelEstudioLaboratorioScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 234, Short.MAX_VALUE)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(panelEstudioLaboratorio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(textoDescriptivoVisualizacionEstudioLaboratorio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(textoDescriptivoVisualizacionEstudioLaboratorio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(panelEstudioLaboratorio, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE)
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    private void agregarDeterminacionesBotonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_agregarDeterminacionesBotonActionPerformed
        agregarDeterminaciones();
}//GEN-LAST:event_agregarDeterminacionesBotonActionPerformed

    /**
     * Agrega determinaciones a un analisis.
     */
    private void agregarDeterminaciones() {
        if (analisisDeterminaciones.getSelectedItem().toString().isEmpty()
                || tipoDeterminaciones.getSelectedItem().toString().isEmpty()) {
            agregarDeterminacionesBoton.setForeground(Fuente.COLOR_ERROR);
            agregarDeterminacionesBoton.setToolTipText(InformeError.
                    INFORME_ERROR_LABORATORIO_DETERMINACIONES_SELECCION_ANALISIS_TIPO);
        } else {
            obtenerAnalisisYTipo();
            agregarPanel(panelEstudioLaboratorioInterno,
                new DatosDeterminacionesLaboratorioPanel(
                analisisCargaEstudioLaboratorio,
                tipoCargaEstudioLaboratorio, null));
            agregarDeterminacionesBoton.setForeground(Fuente.COLOR_NORMAL);
            agregarDeterminacionesBoton.setToolTipText(null);
        }
    }

    /**
      * Obtiene el objeto analisis y tipo para el panel a agregar.
      * @param evt
      */
     private void obtenerAnalisisYTipo() {
        analisisCargaEstudioLaboratorio =
                AnalisisCargaEstudioLaboratorioLogica.
                getAnalisisCargaEstudioLaboratorioPorNombre(
                analisisDeterminaciones.getSelectedItem().toString());
        tipoCargaEstudioLaboratorio =
                TipoCargaEstudioLaboratorioLogica.
                getTipoCargaEstudioLaboratorioPorNombreYNombreAnalisisCargaEstudioLaboratorio(
                tipoDeterminaciones.getSelectedItem().toString(),
                analisisDeterminaciones.getSelectedItem().toString());
    }

     /**
     * Agrega un panel a un panel.
     *
     * @param panelContenedor El panel que contiene al panel que se agregará
     * @param panelComponente El panel componente que se agregará
     */
    private void agregarPanel(JPanel panelContenedor, JPanel panelComponente) {
        panelContenedor.add(panelComponente);
        panelContenedor.revalidate();
        panelContenedor.repaint();
    }

    /**
     * Realiza la validación de los datos
     *
     * @return true si esta listo para cargarse, false en caso contrario
     */
    public boolean validarCamposEstudioLaboratorio() {
       boolean esBioquimicoValido = validarCampoBioquimico();
        boolean esProtocoloValido = validarCampoProtocolo();
        boolean esDeterminacionesValido = validarCamposDeterminaciones();

        return esBioquimicoValido && esProtocoloValido
                && esDeterminacionesValido;
    }

    /**
     * Valida los campos correspondiente al campo Bioquimico.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCampoBioquimico() {
        boolean retorno;

        if (!CapaValidacion.validarCampoObligatorio(bioquimicoLaboratorio.
                getText())) {
            textoBioquimicoLaboratorio.setForeground(
                    Fuente.COLOR_ERROR);
            textoBioquimicoLaboratorio.setToolTipText(
                    InformeError.
                    INFORME_ERROR_LABORATORIO_BIOQUIMICO);
            retorno = false;
        } else {
            textoBioquimicoLaboratorio.setForeground(Fuente.COLOR_NORMAL);
            textoBioquimicoLaboratorio.setToolTipText(null);
            retorno = true;
        }

        return retorno;
    }

    /**
     * Valida los campos correspondiente al campo Protocolo.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCampoProtocolo() {
        boolean retorno;

        if (!CapaValidacion.validarCampoObligatorio(protocoloLaboratorio.
                getText())) {
            textoProtocoloLaboratorio.setForeground(
                    Fuente.COLOR_ERROR);
            textoProtocoloLaboratorio.setToolTipText(
                    InformeError.
                    INFORME_ERROR_LABORATORIO_PROTOCOLO);
            retorno = false;
        } else {
            textoProtocoloLaboratorio.setForeground(Fuente.COLOR_NORMAL);
            textoProtocoloLaboratorio.setToolTipText(null);
            retorno = true;
        }

        return retorno;
    }
    /**
     * Valida los campos correspondiente a los campos de determinaciones.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCamposDeterminaciones() {
        boolean retorno = true;
        int paneles = panelEstudioLaboratorioInterno.getComponents().length;

        if (paneles == 0) {
            textoDeterminaciones.setForeground(Fuente.COLOR_ERROR);
            textoDeterminaciones.setToolTipText(InformeError.
                    INFORME_ERROR_LABORATORIO_DETERMINACIONES_ANALISIS_VACIO);
            retorno = false;
        } else {
            for (int i = 0; i < paneles; i++) {
                if (!((DatosDeterminacionesLaboratorioPanel)
                        panelEstudioLaboratorioInterno.
                        getComponents()[i]).validarCampos()) {
                    retorno = false;
                    textoDeterminaciones.setForeground(Fuente.COLOR_ERROR);
                    textoDeterminaciones.
                            setToolTipText(InformeError.
                            INFORME_ERROR_LABORATORIO_DETERMINACIONES_ANALISIS_NO_VALIDOS);
                }
            }
        }
        if(retorno) {
                textoDeterminaciones.setForeground(Fuente.COLOR_NORMAL);
                textoDeterminaciones.setToolTipText(null);
                retorno = true;
            }
        return retorno;
    }

    private void analisisDeterminacionesFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_analisisDeterminacionesFocusLost
        tipoDeterminaciones.setModel(CapaPresentacion.getListaDeTipoCargaEstudioLaboratorios(
                listaAnalisisCargaEstudioLaboratorio,
                analisisDeterminaciones.getSelectedIndex() - 1));
}//GEN-LAST:event_analisisDeterminacionesFocusLost

    /**
     * Agrega un estudio de laboratorio.
     *
     * @return true si se agregó correctamente, false en caso contrario.
     */
    public boolean agregarEstudioLaboratorioLaboratorio(int[] idObjetoCreado, 
            EstudioLaboratorio estudioLaboratorio) {
            this.estudioLaboratorio = estudioLaboratorio;
            //Carga toda la información de la pantalla
            recopilarDatos();
            //Agrega el estudio cardiológico
            if ((EstudioLaboratorioLogica.agregarEstudioLaboratorio(
                    datosGeneralLaboratorio,
                    datosDeterminacionesEstudioLaboratorio,
                    new EstudioLaboratorio(), idObjetoCreado))) {
                return true;
            } else {
                return false;
            }
    }

    /**
     * Carga todos los datos ingresados en pantalla.
     *
     */
    private void recopilarDatos() {
        recopilarDatosGeneral();
        recopilarDatosComponentesDeterminaciones();
    }

    /**
     * Recopila toda la informacion ingresada en ventana principal de laboratorio.
     *
     */
    private void recopilarDatosGeneral() {
        datosGeneralLaboratorio = new Object[3];

        datosGeneralLaboratorio[CapaLogica.ESTUDIO_LABORATORIO_BIOQUIMICO] =
                bioquimicoLaboratorio.getText();

        datosGeneralLaboratorio[CapaLogica.ESTUDIO_LABORATORIO_PROTOCOLO] =
                protocoloLaboratorio.getText();

        datosGeneralLaboratorio[CapaLogica.ESTUDIO_LABORATORIO_COMENTARIOS] =
                comentariosLaboratorio.getText();
    }

    /**
     * Recopila toda la informacion ingresada en cada panel de Determinaciones.
     *
     */
    private void recopilarDatosComponentesDeterminaciones() {
        Component[] componentesDeterminaciones =
                panelEstudioLaboratorioInterno.getComponents();

        datosDeterminacionesEstudioLaboratorio =
                new Object[componentesDeterminaciones.length][7];

        for (int i = 0; i < componentesDeterminaciones.length; i++) {
            datosDeterminacionesEstudioLaboratorio[i][
                    CapaLogica.ESTUDIO_LABORATORIO_DETERMINACIONES_ANALISIS_STRING] =
                    ((DatosDeterminacionesLaboratorioPanel)
                    componentesDeterminaciones[i]).getAnalisis();

            datosDeterminacionesEstudioLaboratorio[i][
                    CapaLogica.ESTUDIO_LABORATORIO_DETERMINACIONES_TIPO_STRING] =
                    ((DatosDeterminacionesLaboratorioPanel)
                    componentesDeterminaciones[i]).getTipo();

            datosDeterminacionesEstudioLaboratorio[i][
                    CapaLogica.ESTUDIO_LABORATORIO_DETERMINACIONES_UNIDADES] =
                    ((DatosDeterminacionesLaboratorioPanel)
                    componentesDeterminaciones[i]).getUnidades();

            datosDeterminacionesEstudioLaboratorio[i][
                    CapaLogica.ESTUDIO_LABORATORIO_DETERMINACIONES_SISTEMA] =
                    ((DatosDeterminacionesLaboratorioPanel)
                    componentesDeterminaciones[i]).getSistema();

            datosDeterminacionesEstudioLaboratorio[i][
                    CapaLogica.ESTUDIO_LABORATORIO_DETERMINACIONES_VALOR] =
                    ((DatosDeterminacionesLaboratorioPanel)
                    componentesDeterminaciones[i]).getValor();

            datosDeterminacionesEstudioLaboratorio[i][
                    CapaLogica.ESTUDIO_LABORATORIO_DETERMINACIONES_VALORES_DE_REFERENCIA] =
                    ((DatosDeterminacionesLaboratorioPanel)
                    componentesDeterminaciones[i]).getValoresDeReferencia();

            datosDeterminacionesEstudioLaboratorio[i][
                    CapaLogica.ESTUDIO_LABORATORIO_DETERMINACIONES_TIPO] =
                    ((DatosDeterminacionesLaboratorioPanel)
                    componentesDeterminaciones[i]).getTipoCargaEstudioLaboratorio();
        }
    }

    /**
     * Setea datos de la ventana.
     *
     * @param estudioLaboratorio  El estudio laboratorio a setear
     */
    public void personalizarGUI() {
        if (estudioLaboratorio != null) {
            exhibirDatosEnPantalla();
            if(CapaPresentacion.modoVisualizacion) {
                inhabilitarCampos();
            }
            personalizarJPanels();
        }
    }

    /**
     * Permite visualizar los detalles de la evolución.
     *
     */
    private void exhibirDatosEnPantalla() {
        bioquimicoLaboratorio.setText(estudioLaboratorio.
                getBioquimicoEstudioLaboratorio());
        bioquimicoLaboratorio.setCaretPosition(0);
        bioquimicoLaboratorio.setToolTipText(estudioLaboratorio.
                getBioquimicoEstudioLaboratorio());
        protocoloLaboratorio.setText(estudioLaboratorio.
                getProtocoloEstudioLaboratorio());
        protocoloLaboratorio.setCaretPosition(0);
        protocoloLaboratorio.setToolTipText(estudioLaboratorio.
                getProtocoloEstudioLaboratorio());
        comentariosLaboratorio.setText(estudioLaboratorio.
                getComentariosEstudioLaboratorio());
        comentariosLaboratorio.setCaretPosition(0);
        comentariosLaboratorio.setToolTipText(estudioLaboratorio.
                getComentariosEstudioLaboratorio());
    }

    /**
     * Pone en false la propiedad enabled de todos los campos de ingreso.
     *
     */
    private void inhabilitarCampos() {
        bioquimicoLaboratorio.setFocusable(false);
        bioquimicoLaboratorio.setEnabled(false);
        protocoloLaboratorio.setFocusable(false);
        protocoloLaboratorio.setEnabled(false);
        comentariosLaboratorio.setFocusable(false);
        comentariosLaboratorio.setEnabled(false);
        panelDeterminacionesAnalisisYTipo.setVisible(false);
    }

    /**
     * Personaliza los JPanels según el tipo de estudio.
     */
    private void personalizarJPanels() {
        Vector<DeterminacionesEstudioLaboratorio>
                vectorDeterminacionesEstudioLaboratorio =
                DeterminacionesEstudioLaboratorioLogica.
                getVectorDeterminacionesEstudioLaboratorioPorIdEstudioLaboratorio(
                estudioLaboratorio.getIdEstudioLaboratorio());
        for (int i = 0; i < vectorDeterminacionesEstudioLaboratorio.size(); i++) {
            agregarPanel(panelEstudioLaboratorioInterno,
                    new DatosDeterminacionesLaboratorioPanel(null, null,
                    vectorDeterminacionesEstudioLaboratorio.elementAt(i)));

        }
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    cerrarVentana();
                }
            }
        };

        //Setear eventos
        bioquimicoLaboratorio.addKeyListener(keyListenerEscape);
        protocoloLaboratorio.addKeyListener(keyListenerEscape);
        comentariosLaboratorio.addKeyListener(keyListenerEscape);
        analisisDeterminaciones.addKeyListener(keyListenerEscape);
        tipoDeterminaciones.addKeyListener(keyListenerEscape);
        agregarDeterminacionesBoton.addKeyListener(keyListenerEscape);
    }
    
    private void cerrarVentana() {
        JDialog jdialog = (JDialog)
                this.getParent().getParent().getParent().getParent().
                getParent().getParent().getParent().getParent();
        jdialog.dispose();
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JScrollPane ComentariosLaboratorioScrollPane;
    private javax.swing.JButton agregarDeterminacionesBoton;
    private javax.swing.JComboBox analisisDeterminaciones;
    private javax.swing.JTextField bioquimicoLaboratorio;
    private javax.swing.JTextArea comentariosLaboratorio;
    private javax.swing.JPanel panelDeterminacionesAnalisisYTipo;
    private javax.swing.JPanel panelEstudioLaboratorio;
    private javax.swing.JPanel panelEstudioLaboratorioInterno;
    private javax.swing.JScrollPane panelEstudioLaboratorioScrollPane;
    private javax.swing.JTextField protocoloLaboratorio;
    private javax.swing.JSeparator separadorDeterminacionLaboratorio1;
    private javax.swing.JLabel textoAnalisisDeterminaciones;
    private javax.swing.JLabel textoBioquimicoLaboratorio;
    private javax.swing.JLabel textoComentariosLaboratorio;
    private javax.swing.JLabel textoDescriptivoVisualizacionEstudioLaboratorio;
    private javax.swing.JLabel textoDeterminaciones;
    private javax.swing.JLabel textoProtocoloLaboratorio;
    private javax.swing.JLabel textoTipoDeterminaciones;
    private javax.swing.JComboBox tipoDeterminaciones;
    // End of variables declaration//GEN-END:variables
    private Vector<AnalisisCargaEstudioLaboratorio>
            listaAnalisisCargaEstudioLaboratorio;
    private Object[][] datosDeterminacionesEstudioLaboratorio;
    private Object[] datosGeneralLaboratorio;
    private EstudioLaboratorio estudioLaboratorio;
    private AnalisisCargaEstudioLaboratorio analisisCargaEstudioLaboratorio;
    private TipoCargaEstudioLaboratorio tipoCargaEstudioLaboratorio;
}
